/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */
package com.ztewatch.wearcontacts.loader;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.database.MergeCursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract.Groups;

import com.ztewatch.wearcontacts.R;
import com.ztewatch.wearcontacts.utils.ContactPhotoUtils;

/**
 * Group loader for the group list that includes details such as the number of
 * contacts per group and number of groups per account. This list is sorted by
 * account type, account name, where the group names are in alphabetical order.
 * Note that the list excludes default, favorite, and deleted groups.
 */
public final class GroupListLoader extends CursorLoader {

	private final static String[] COLUMNS = new String[] { Groups.ACCOUNT_NAME,
			Groups.ACCOUNT_TYPE, Groups.DATA_SET, Groups._ID, Groups.TITLE,
			Groups.SUMMARY_COUNT,Groups.GROUP_IS_READ_ONLY};

	public final static int ACCOUNT_NAME = 0;
	public final static int ACCOUNT_TYPE = 1;
	public final static int DATA_SET = 2;
	public final static int GROUP_ID = 3;
	public final static int TITLE = 4;
	public final static int MEMBER_COUNT = 5;

	private static final Uri GROUP_LIST_URI = Groups.CONTENT_SUMMARY_URI;
	private Context mContext;

	public GroupListLoader(Context context) {
		super(context, GROUP_LIST_URI, COLUMNS, Groups.ACCOUNT_TYPE
				+ " NOT NULL AND " + Groups.ACCOUNT_NAME + " NOT NULL AND "
				+ Groups.AUTO_ADD + "=0 AND " + Groups.FAVORITES + "=0 AND "
				+ Groups.DELETED + "=0", null, Groups.ACCOUNT_TYPE + ", "
				+ Groups.ACCOUNT_NAME + ", " + Groups.DATA_SET + ", "
				+ Groups.TITLE + " COLLATE LOCALIZED ASC");
		mContext = context;
	}

	@Override
	public Cursor loadInBackground() {
		List<Cursor> cursors = new ArrayList<Cursor>();
		Cursor cursor = null;
		try {
			cursor = super.loadInBackground();
		} catch (NullPointerException e) {
		}
		if(cursor != null){
			cursors.add(cursor);
		}
		MatrixCursor matrix = new MatrixCursor(COLUMNS);
		Object[] addGroup = new Object[COLUMNS.length];
		for (int i = 0; i < addGroup.length; i++) {
			if (Groups.TITLE.equals(COLUMNS[i])) {
				addGroup[i] = mContext.getString(R.string.new_folder_str);
			}
//			else if(GroupListLoaderUtil.GROUP_PHOTO_DATA.equals(COLUMNS[i])){
//				Bitmap bmp = BitmapFactory.decodeResource(mContext.getResources(),
//						R.drawable.ic_add_contact);
//				byte[] photo = ContactPhotoUtils.compressBitmap(bmp);
//				addGroup[i] = photo;
//			}
		}
		matrix.addRow(addGroup);
		cursors.add(matrix);
		return new MergeCursor(cursors.toArray(new Cursor[cursors.size()]));
	}
}
